/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package vista;

import hibernatecontrolador.exceptions.IllegalOrphanException;
import hibernatemodelo.Contacto;
import hibernatemodelo.Evento;
import hibernatemodelo.Invitar;
import hibernatemodelo.Lugar;
import hibernatemodelo.Seramigo;
import hibernatecontrolador.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Date;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;

/**
 * Formulario con el que se controlan los eventos
 *
 * @author M.Luz García
 * @author Luis Massó
 */
public class JIntEventos extends javax.swing.JInternalFrame {

    MdiPrueba padre;
    Evento miEvento;
    private boolean esMiEvento;

    private int idActual;       // variable que servirá para pasarle un id para mostrar

    /**
     * @param idActual the idActual to set
     */
    public void setIdActual(int idActual) {
        this.idActual = idActual;
        if (idActual == -1) { // Nuevo evento
            jBEventoGuardar.setVisible(true);
            jBEventoEliminar.setVisible(false);
            jChAsistir.setVisible(false);
            jBEventoModificar.setVisible(false);
            jBEventoInvitar.setEnabled(false);
            miEvento = null;
            jLabel3.setText("0");
            esMiEvento = true;
        }
    }

    public Evento getMiEvento() {
        return miEvento;
    }

    /**
     * Define el campo miEvento, e inicializa todo a partir de él
     *
     * @param e
     */
    public void setMiEvento(Evento e) {
        this.miEvento = e;

        JDEventoFechaIni.setDate(miEvento.getFechainicio());
        int horas = miEvento.getFechainicio().getHours();
        int min = miEvento.getFechainicio().getMinutes();
        int sec = 0;
        Date dateini = new Date(0, 0, 0, horas, min, sec);
        jTimeEventoIni.setTime(dateini);

        JDEventoFechaFin.setDate(miEvento.getFechafin());
        horas = miEvento.getFechainicio().getHours();
        min = miEvento.getFechainicio().getMinutes();
        sec = 0;
        Date datefin = new Date(0, 0, 0, horas, min, sec);
        jTimeEventoFin.setTime(datefin);

        jTextArea1.setText(miEvento.getDescripcion());
        jTEventoCalle.setText(miEvento.getLugar().getCalle());
        jTEventoCP.setText(miEvento.getLugar().getCp());

        jComboBox1.setSelectedItem(miEvento.getLugar());
        jBEventoGuardar.setVisible(false);

        if (miEvento.getIdcreador().getId() == padre.miContacto.getId()) {
            esMiEvento = true;
            jChAsistir.setVisible(false);
            jBEventoInvitar.setEnabled(true);
            this.setTitle("Evento");
        } else {
            esMiEvento = false;
            jChAsistir.setVisible(true);
            for (Invitar i : miEvento.getInvitarCollection()) {
                if (i.getIdinvitado().getId() == padre.miContacto.getId()) {
                    jChAsistir.setSelected(i.getAsitire());
                }
            }

            jBEventoInvitar.setEnabled(false);
            jBEventoEliminar.setVisible(false);
            this.setTitle("Evento de " + miEvento.getIdcreador().getNombre());
        }

        calcularAsistentes();
        congelarCampos();
        cargarListaInvitados();
        cargarListaAmigos();
    }

    public MdiPrueba getPadre() {
        return padre;
    }

    public void setPadre(MdiPrueba padre) {
        this.padre = padre;
    }

    /**
     * Creates new form JIntEventos
     */
    public JIntEventos() {
        initComponents();

        jComboBox1.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent ie) {
                Lugar l = (Lugar) jComboBox1.getSelectedItem();
                jTEventoCalle.setText(l.getCalle());
                jTEventoCP.setText(l.getCp());
            }
        });
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jBEventoModificar = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();
        jLEventoDescripcion = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        JDEventoFechaIni = new com.toedter.calendar.JDateChooser();
        jLEventoFechaIni = new javax.swing.JLabel();
        jLEventoFechaFin = new javax.swing.JLabel();
        JDEventoFechaFin = new com.toedter.calendar.JDateChooser();
        jLEventoCalle = new javax.swing.JLabel();
        jTEventoCalle = new javax.swing.JTextField();
        jLEventoCP = new javax.swing.JLabel();
        jTEventoCP = new javax.swing.JTextField();
        jChAsistir = new javax.swing.JCheckBox();
        jLEventoIran = new javax.swing.JLabel();
        jTimeEventoIni = new lu.tudor.santec.jtimechooser.JTimeChooser();
        jTimeEventoFin = new lu.tudor.santec.jtimechooser.JTimeChooser();
        jComboBox1 = new javax.swing.JComboBox();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jBEventoGuardar = new javax.swing.JButton();
        jBEventoEliminar = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jLEventoInvitarAmigos = new javax.swing.JList();
        jBEventoInvitar = new javax.swing.JButton();
        jLabel4 = new javax.swing.JLabel();
        jScrollPane3 = new javax.swing.JScrollPane();
        jLInvitados = new javax.swing.JList();

        setClosable(true);
        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
        setResizable(true);
        setTitle("Eventos");
        addInternalFrameListener(new javax.swing.event.InternalFrameListener() {
            public void internalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameClosed(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameClosing(javax.swing.event.InternalFrameEvent evt) {
                formInternalFrameClosing(evt);
            }
            public void internalFrameDeactivated(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameDeiconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameIconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameOpened(javax.swing.event.InternalFrameEvent evt) {
                formInternalFrameOpened(evt);
            }
        });

        jBEventoModificar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/file_edit.png"))); // NOI18N
        jBEventoModificar.setText("Modificar");
        jBEventoModificar.setToolTipText("Guarde los cambios realizados");
        jBEventoModificar.setPreferredSize(new java.awt.Dimension(130, 45));
        jBEventoModificar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBEventoModificarActionPerformed(evt);
            }
        });

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Evento"));

        jLEventoDescripcion.setText("Descripción:");

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        JDEventoFechaIni.setPreferredSize(new java.awt.Dimension(120, 30));
        JDEventoFechaIni.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                JDEventoFechaIniPropertyChange(evt);
            }
        });

        jLEventoFechaIni.setText("Comienza");

        jLEventoFechaFin.setText("Termina:");

        JDEventoFechaFin.setPreferredSize(new java.awt.Dimension(120, 30));

        jLEventoCalle.setText("Elija una dirección de la lista o escríbala en los campos inferiores");

        jLEventoCP.setText("Código Postal:");

        jChAsistir.setFont(new java.awt.Font("Dialog", 1, 14)); // NOI18N
        jChAsistir.setText("Asistiré");

        jLEventoIran.setFont(new java.awt.Font("Dialog", 1, 14)); // NOI18N
        jLEventoIran.setText("Asistentes:");

        jTimeEventoIni.setFont(new java.awt.Font("Dialog", 0, 14)); // NOI18N

        jTimeEventoFin.setFont(new java.awt.Font("Dialog", 0, 14)); // NOI18N

        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        jLabel2.setText("Calle");

        jLabel3.setText("0");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(jLabel2)
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jScrollPane1)
                            .addComponent(jComboBox1, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jTEventoCalle)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(jLEventoCP)
                                .addGap(18, 18, 18)
                                .addComponent(jTEventoCP, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jChAsistir)
                                .addGap(54, 54, 54)
                                .addComponent(jLEventoIran)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(jLabel3)
                                .addGap(38, 38, 38))
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLEventoDescripcion)
                                    .addGroup(jPanel1Layout.createSequentialGroup()
                                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addGroup(jPanel1Layout.createSequentialGroup()
                                                .addComponent(JDEventoFechaIni, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addComponent(jTimeEventoIni, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                            .addComponent(jLEventoFechaIni))
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addComponent(jLEventoFechaFin)
                                            .addGroup(jPanel1Layout.createSequentialGroup()
                                                .addComponent(JDEventoFechaFin, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addComponent(jTimeEventoFin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                                    .addComponent(jLEventoCalle))
                                .addGap(0, 0, Short.MAX_VALUE)))
                        .addContainerGap())))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLEventoFechaIni, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLEventoFechaFin, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jTimeEventoFin, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(JDEventoFechaIni, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(JDEventoFechaFin, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jTimeEventoIni, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jLEventoDescripcion, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(8, 8, 8)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 201, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(55, 55, 55)
                .addComponent(jLEventoCalle)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jLabel2)
                .addGap(12, 12, 12)
                .addComponent(jTEventoCalle, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(jLEventoCP)
                    .addComponent(jTEventoCP, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jChAsistir, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLEventoIran)
                    .addComponent(jLabel3))
                .addGap(17, 17, Short.MAX_VALUE))
        );

        jBEventoGuardar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/save.png"))); // NOI18N
        jBEventoGuardar.setText("Crear");
        jBEventoGuardar.setToolTipText("");
        jBEventoGuardar.setPreferredSize(new java.awt.Dimension(130, 45));
        jBEventoGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBEventoGuardarActionPerformed(evt);
            }
        });

        jBEventoEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/delete.png"))); // NOI18N
        jBEventoEliminar.setText("Eliminar");
        jBEventoEliminar.setPreferredSize(new java.awt.Dimension(130, 45));
        jBEventoEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBEventoEliminarActionPerformed(evt);
            }
        });

        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Invitaciones"));
        jPanel2.setToolTipText("Invitaciones");

        jLabel1.setText("Amigos:");

        jLEventoInvitarAmigos.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jLEventoInvitarAmigos.setToolTipText("");
        jScrollPane2.setViewportView(jLEventoInvitarAmigos);

        jBEventoInvitar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/file_edit.png"))); // NOI18N
        jBEventoInvitar.setText("Invitar");
        jBEventoInvitar.setToolTipText("Seleccione los amigos a los que quiera invitar");
        jBEventoInvitar.setPreferredSize(new java.awt.Dimension(130, 45));
        jBEventoInvitar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBEventoInvitarActionPerformed(evt);
            }
        });

        jLabel4.setText("Lista de invitados");

        jLInvitados.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jScrollPane3.setViewportView(jLInvitados);

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel2Layout.createSequentialGroup()
                                .addGap(47, 47, 47)
                                .addComponent(jBEventoInvitar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(jPanel2Layout.createSequentialGroup()
                                .addContainerGap()
                                .addComponent(jLabel1))
                            .addGroup(jPanel2Layout.createSequentialGroup()
                                .addContainerGap()
                                .addComponent(jLabel4)))
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jScrollPane2)
                            .addComponent(jScrollPane3))))
                .addContainerGap())
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                .addGap(21, 21, 21)
                .addComponent(jLabel4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane3)
                .addGap(18, 18, 18)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 197, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jBEventoInvitar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 35, Short.MAX_VALUE))
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jBEventoModificar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(35, 35, 35)
                .addComponent(jBEventoEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(29, 29, 29)
                .addComponent(jBEventoGuardar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jBEventoEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jBEventoGuardar, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jBEventoModificar, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(33, Short.MAX_VALUE))
        );

        jPanel2.getAccessibleContext().setAccessibleName("Invitados");

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Método para guardar el evento y el lugar dónde se realizará
     *
     * @param evt
     */
    private void jBEventoGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBEventoGuardarActionPerformed
        if (esMiEvento) {
            miEvento = null;
            String mensaje = "";
            boolean datosOk = true;
            boolean guardado = false;
            // Comprobamos las fechas
            if (JDEventoFechaFin.getDate() == null || JDEventoFechaIni.getDate() == null) {
                datosOk = false;
                mensaje += "Debe seleccionar una fecha de inicio y otra de fin\n";
            } else if (JDEventoFechaFin.getDate().before(new Date()) || JDEventoFechaIni.getDate().before(new Date())) {
                datosOk = false;
                mensaje += "El evento no puede empezar ni acabar antes de la fecha actual\n";

            }
            if (jTextArea1.getText().equals("")) {
                mensaje += "La descripción no puede estar vacía\n";
                datosOk = false;
            }

            if (jTEventoCalle.getText().equals("") || jTEventoCP.getText().equals("")) {
                mensaje += "Debe rellenar ambos campos de la dirección\n";
                datosOk = false;

            }

            Evento evento = null;
            if (datosOk) {
                try {
                    evento = camposToevento();
                    guardado = true;
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, "No se ha podido crear el evento");
                }
            }

            if (!guardado) {
                JOptionPane.showMessageDialog(null, mensaje);
            } else {
                JOptionPane.showMessageDialog(null, "Evento creado correctamente");
                congelarCampos();
                jBEventoInvitar.setEnabled(true);
                jBEventoEliminar.setVisible(true);
                jChAsistir.setVisible(false);
                jBEventoModificar.setVisible(true);
                jBEventoInvitar.setEnabled(true);
                jBEventoGuardar.setVisible(false);
                miEvento = evento;
                padre.panelusuario.cargarDatos();
            }

        }

    }//GEN-LAST:event_jBEventoGuardarActionPerformed

    /**
     * Método que se ejecuta al hacer click en el botón de eliminar evento
     *
     * @param evt
     */
    private void jBEventoEliminarActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jBEventoEliminarActionPerformed
    {//GEN-HEADEREND:event_jBEventoEliminarActionPerformed
        if (miEvento != null) {
            int respuesta = JOptionPane.showConfirmDialog(null,
                    "Realmente desea borrar su evento: " + miEvento.toString(),
                    "Eliminar evento", JOptionPane.YES_NO_OPTION);

            if (respuesta == JOptionPane.YES_OPTION) {
                try {
                    for (Invitar i : miEvento.getInvitarCollection()) {
                        padre.invitarControlador.destroy(i.getId());
                    }
                    padre.lugarControlador.destroy(miEvento.getLugar().getId());
                    padre.eventoControlador.destroy(miEvento.getId());
                    padre.listaEventos = padre.eventoControlador.findEventoEntities();
                    int id = padre.miContacto.getId();
                    padre.miContacto = padre.contactoControlador.findContacto(id);
                    limpiarCampos();
                    padre.panelusuario.cargarDatos();
                    JOptionPane.showMessageDialog(null, "Evento eliminado con éxito");
                    this.hide();
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, "No se ha podido eliminar el evento");
                }
            }
        }
    }//GEN-LAST:event_jBEventoEliminarActionPerformed

    /**
     * Método que limpia los campos y carga los datos cuando se abre el
     * formulario
     *
     * @param evt
     */
    private void formInternalFrameOpened(javax.swing.event.InternalFrameEvent evt)//GEN-FIRST:event_formInternalFrameOpened
    {//GEN-HEADEREND:event_formInternalFrameOpened
        cargarListaAmigos();
    }//GEN-LAST:event_formInternalFrameOpened

    /**
     * Método que limpia los campos se abre el formulario
     *
     * @param evt
     */
    private void formInternalFrameClosing(javax.swing.event.InternalFrameEvent evt)//GEN-FIRST:event_formInternalFrameClosing
    {//GEN-HEADEREND:event_formInternalFrameClosing
        limpiarCampos();
        idActual = 0;
    }//GEN-LAST:event_formInternalFrameClosing

    /**
     * Método que modifica el calendario fecha fin si cambia el fecha inicio
     *
     * @param evt
     */
    private void JDEventoFechaIniPropertyChange(java.beans.PropertyChangeEvent evt)//GEN-FIRST:event_JDEventoFechaIniPropertyChange
    {//GEN-HEADEREND:event_JDEventoFechaIniPropertyChange
        JDEventoFechaFin.setDate(JDEventoFechaIni.getDate());
    }//GEN-LAST:event_JDEventoFechaIniPropertyChange

    /**
     * Método que se ejecuta al hacer click en el botón modificar
     *
     * @param evt
     */
    private void jBEventoModificarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBEventoModificarActionPerformed
        try {
            if (esMiEvento) {
                if (jBEventoModificar.getText().equals("Modificar")) {
                    jBEventoModificar.setText("Guardar");
                    editarCampos();
                } else {
                    miEvento = camposToevento();

                    int id = miEvento.getId();
                    miEvento.setId(id);
                    padre.eventoControlador.edit(miEvento);
                    jBEventoModificar.setText("Modificar");
                    congelarCampos();
                    JOptionPane.showMessageDialog(null, "Evento actualizado con éxito");
                    padre.panelusuario.cargarDatos();

                }

            } else {
                Invitar inv = null;
                for (Invitar i : miEvento.getInvitarCollection()) {
                    if (i.getIdevento().getId() == miEvento.getId()
                            && i.getIdinvitado().getId() == padre.miContacto.getId()) {
                        inv = i;
                        inv.setAsitire(jChAsistir.isSelected());
                    }
                }
                padre.invitarControlador.edit(inv);
                JOptionPane.showMessageDialog(null, "Modificada su asistencia al evento");
            }

            padre.listaInvitar = padre.invitarControlador.findInvitarEntities();
            padre.listaContactos = padre.contactoControlador.findContactoEntities();
            padre.listaEventos = padre.eventoControlador.findEventoEntities();

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "No se pudo modificar el evento");
        }
        calcularAsistentes();
        cargarListaAmigos();
        cargarListaInvitados();
        padre.panelusuario.cargarDatos();
    }//GEN-LAST:event_jBEventoModificarActionPerformed

    /**
     * Método que se ejecuta al hacer click en el botón invitar
     *
     * @param evt
     */
    private void jBEventoInvitarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBEventoInvitarActionPerformed
        Contacto c = (Contacto) jLEventoInvitarAmigos.getSelectedValue();
        if (c == null) // no hay ninguno seleccinado
        {
            JOptionPane.showMessageDialog(null, "Seleccione un amigo de la lista");
        } else // hay alguno seleccionado
        {
            int respuesta = JOptionPane.showConfirmDialog(null,
                    "Realmente desea invitar al evento a: " + c.getNombre(),
                    "Invitar amigo", JOptionPane.YES_NO_OPTION);
            if (respuesta == JOptionPane.YES_OPTION) {
                try {

                    Invitar i = new Invitar();
                    i.setIdanfitrion(padre.miContacto);
                    i.setIdevento(miEvento);
                    i.setIdinvitado(c);
                    padre.invitarControlador.create(i);

                    padre.contactoControlador = new ContactoJpaController(padre.emf);
                    padre.eventoControlador = new EventoJpaController(padre.emf);
                    padre.lugarControlador = new LugarJpaController(padre.emf);
                    padre.serAmigoControlador = new SeramigoJpaController(padre.emf);
                    padre.listaAmigos = padre.serAmigoControlador.findSeramigoEntities();

                    padre.invitarControlador = new InvitarJpaController(padre.emf);

                    padre.listaContactos = padre.contactoControlador.findContactoEntities();
                    padre.listaEventos = padre.eventoControlador.findEventoEntities();
                    padre.listaLugares = padre.lugarControlador.findLugarEntities();
                    padre.listaInvitar = padre.invitarControlador.findInvitarEntities();
                    /*
                     padre.listaEventos = padre.eventoControlador.findEventoEntities();
                     padre.listaInvitar = padre.invitarControlador.findInvitarEntities();
                     padre.listaContactos = padre.contactoControlador.findContactoEntities();
                     */
                    int id = miEvento.getId();
                    miEvento = padre.eventoControlador.findEvento(id);
                    //padre.miContacto = padre.contactoControlador.findContacto(id);

                    calcularAsistentes();
                    cargarListaAmigos();
                    cargarListaInvitados();
                    padre.panelusuario.cargarDatos();
                    JOptionPane.showMessageDialog(null, "Invitación realizada con éxito a " + c.getNombre());
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, "No se ha podido invitar a "
                            + c.getNombre() + " al evento");
                }
            }
        }
    }//GEN-LAST:event_jBEventoInvitarActionPerformed


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private com.toedter.calendar.JDateChooser JDEventoFechaFin;
    private com.toedter.calendar.JDateChooser JDEventoFechaIni;
    private javax.swing.JButton jBEventoEliminar;
    private javax.swing.JButton jBEventoGuardar;
    private javax.swing.JButton jBEventoInvitar;
    private javax.swing.JButton jBEventoModificar;
    private javax.swing.JCheckBox jChAsistir;
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JLabel jLEventoCP;
    private javax.swing.JLabel jLEventoCalle;
    private javax.swing.JLabel jLEventoDescripcion;
    private javax.swing.JLabel jLEventoFechaFin;
    private javax.swing.JLabel jLEventoFechaIni;
    private javax.swing.JList jLEventoInvitarAmigos;
    private javax.swing.JLabel jLEventoIran;
    private javax.swing.JList jLInvitados;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JTextField jTEventoCP;
    private javax.swing.JTextField jTEventoCalle;
    private javax.swing.JTextArea jTextArea1;
    private lu.tudor.santec.jtimechooser.JTimeChooser jTimeEventoFin;
    private lu.tudor.santec.jtimechooser.JTimeChooser jTimeEventoIni;
    // End of variables declaration//GEN-END:variables

    /**
     * Método que convierte los campos en una instancia evento
     *
     * @return
     */
    private Evento camposToevento() throws IllegalOrphanException, Exception {
        Date dateIni = JDEventoFechaIni.getDate();
        dateIni.setHours(jTimeEventoIni.getHours());
        dateIni.setMinutes(jTimeEventoIni.getMinutes());
        dateIni.setSeconds(0);

        Date dateFin = JDEventoFechaFin.getDate();
        dateFin.setHours(jTimeEventoFin.getHours());
        dateFin.setMinutes(jTimeEventoFin.getMinutes());
        dateFin.setSeconds(0);

        String descripcion = jTextArea1.getText();

        Evento evento = new Evento();

        evento.setFechainicio(dateIni);
        evento.setFechafin(dateFin);
        evento.setDescripcion(descripcion);

        evento.setIdcreador(padre.miContacto);
        if (miEvento != null) {
            evento.setId(miEvento.getId());
            evento.setInvitarCollection(miEvento.getInvitarCollection());
            evento.setLugar(miEvento.getLugar());
            evento.getLugar().setCalle(jTEventoCalle.getText());
            evento.getLugar().setCp(jTEventoCP.getText());
        } else {
            Lugar lugarText = new Lugar();
            lugarText.setCalle(jTEventoCalle.getText());
            lugarText.setCp(jTEventoCP.getText());
            padre.eventoControlador.create(evento);
            lugarText.setIdevento(evento);
            padre.lugarControlador.create(lugarText);

            evento.setLugar(lugarText);
            padre.eventoControlador.edit(evento);
            padre.listaEventos = padre.eventoControlador.findEventoEntities();
            padre.listaLugares = padre.lugarControlador.findLugarEntities();
            cargarLugares();
        }
        return evento;
    }

    /**
     * Método para inicializar los controles
     */
    public void limpiarCampos() {
        //Inicializamos los datepicker a la fecha de hoy
        Date date = new Date();
        JDEventoFechaIni.setDate(date);
        JDEventoFechaFin.setDate(date);
        jTimeEventoIni.setTime(date);
        jTimeEventoFin.setTime(date);

        //Limpiamos los textbox
        jTextArea1.setText("");
        jTEventoCalle.setText("");
        jTEventoCP.setText("");

    }

    /**
     * Método que carga el JList con los amigos del usuario actual
     */
    private void cargarListaAmigos() {
        jLEventoInvitarAmigos.removeAll();      // limpiamos el jList

        DefaultListModel modelAmigos = new DefaultListModel();

        if (esMiEvento) {
            for (Seramigo sa : padre.miContacto.getSeramigoCollection()) {
                boolean encontrado = false;
                if (miEvento != null) {
                    for (Invitar i : miEvento.getInvitarCollection()) {
                        if (i.getIdinvitado().getId() == sa.getIdamigo1().getId()) {
                            encontrado = true;
                        }
                    }
                }

                if (!encontrado) {
                    modelAmigos.addElement(sa.getIdamigo1());
                }
            }
            for (Seramigo sa : padre.miContacto.getSeramigoCollection1()) {
                boolean encontrado = false;
                if (miEvento != null) {
                    for (Invitar i : miEvento.getInvitarCollection()) {
                        if (i.getIdinvitado().getId() == sa.getIdamigo2().getId()) {
                            encontrado = true;
                        }
                    }
                }
                if (!encontrado) {
                    modelAmigos.addElement(sa.getIdamigo2());
                }
            }

            jLEventoInvitarAmigos.setModel(modelAmigos);

        } else {
            for (Seramigo sa : padre.miContacto.getSeramigoCollection()) {
                modelAmigos.addElement(sa.getIdamigo1());
            }
            for (Seramigo sa : padre.miContacto.getSeramigoCollection1()) {
                modelAmigos.addElement(sa.getIdamigo2());
            }
            jLEventoInvitarAmigos.setModel(modelAmigos);
        }
    }

    /**
     * Método que carga el JList con los amigos del usuario actual invitados al
     * evento
     */
    private void cargarListaInvitados() {
        try {
            jLInvitados.removeAll();      // limpiamos el jList

            DefaultListModel modeloLstaInvitados = new DefaultListModel();
            if (miEvento != null) {
                for (Invitar i : miEvento.getInvitarCollection()) {
                    modeloLstaInvitados.addElement(i.getIdinvitado());
                }
            }
            jLInvitados.setModel(modeloLstaInvitados);
        } catch (Exception e) {

        }
    }

    /**
     * Método que carga el ComboBox con los lugares de todos los eventos del
     * usuario actual
     */
    public void cargarLugares() {
        jComboBox1.removeAll();      // limpiamos el jList

        DefaultComboBoxModel modelListaLugares = new DefaultComboBoxModel();
        for (Evento e : padre.listaEventos) {
            if (e.getIdcreador().getId() == padre.miContacto.getId()) {
                Lugar l = e.getLugar();
                modelListaLugares.addElement(l);
            }
        }
        jComboBox1.setModel(modelListaLugares);
    }

    /**
     * Método que calcula el número de asistentes al evento
     */
    private void calcularAsistentes() {
        int asistentes = 0;
        if (miEvento != null) {
            for (Invitar i : miEvento.getInvitarCollection()) {
                if (i.getAsitire()) {
                    asistentes++;
                }
            }
        }
        jLabel3.setText(asistentes + "");
    }

    /**
     * Método que pone todos los campos a enabled - false
     */
    public void congelarCampos() {

        JDEventoFechaFin.setEnabled(false);
        JDEventoFechaIni.setEnabled(false);
        jTimeEventoFin.setEnabled(false);
        jTimeEventoIni.setEnabled(false);
        jTEventoCP.setEnabled(false);
        jTEventoCalle.setEnabled(false);
        jTextArea1.setEnabled(false);
        jComboBox1.setEnabled(false);
    }

    /**
     * Método que permite editar los campos
     */
    public void editarCampos() {

        jBEventoModificar.setVisible(true);
        jBEventoEliminar.setVisible(true);
        JDEventoFechaFin.setEnabled(true);
        JDEventoFechaIni.setEnabled(true);
        jTimeEventoFin.setEnabled(true);
        jTimeEventoIni.setEnabled(true);
        jTEventoCP.setEnabled(true);
        jTEventoCalle.setEnabled(true);
        jTextArea1.setEnabled(true);
        jComboBox1.setEnabled(true);
    }
}
